package linkedList;

import po.ListNode;

/**
 * @author songZiHao
 * @version 1.0.0
 * @ClassName 旋转链表61.java
 * @Description TODO https://leetcode-cn.com/problems/rotate-list/
 * @createTime 2021年03月10日 10:09:00
 */
public class 旋转链表61 extends BaseLinkedListTest {
    /**
     * 给定一个链表，旋转链表，将链表每个节点向右移动 k 个位置，其中 k 是非负数
     */
    public static ListNode rotateRight(ListNode head, int k) {
        if (head==null){
            return null;
        }
        if (head.next==null){
            return head;
        }
        ListNode tail=head;
        //计算链表的长度，找到最后一个节点
        int length=0;
        while (tail.next!=null) {
            length++;
            tail = tail.next;
        }
        tail.next=head;
        //计算出移动的位置在环中的位置
        k = k % length;
        //找到对应的节点
        for (int i = 0; i < (length - k); i++) {
            tail=tail.next;
        }
        //截断环
        head=tail.next;
        tail.next=null;
        return head;
    }
}
